A machine-readable graphical code (“graphical code”) is a graphical representation of information that consists of multiple graphical code elements having different light reflective or light emissive properties. Examples of different types of graphical codes include bar codes, data matrix codes, MaxiCodes, optical character recognition (“OCR”) text, and so forth. Graphical codes have become widely used in many commercial environments, such as point-of-sale stations in retail stores and supermarkets, inventory and document tracking, and the like.
Devices for identifying or extracting information from graphical codes are generally referred to as graphical code readers. Image-based graphical code readers typically include one or more light sources for illuminating a graphical code. Light is reflected from the graphical code toward the graphical code reader. A lens within the graphical code reader focuses an image of the graphical code onto an image sensor over a period of time commonly referred to as an exposure period. Following the exposure period, pixels within the image sensor are read electronically to provide a two-dimensional array of image data corresponding to the graphical code. The image data is then multiplied by a gain. A decoder processes the gain-adjusted image data and extracts the information contained in the graphical code.
Different types of graphical codes include different types of graphical code elements. For example, bar codes include variable-width rectangular bars. Data matrix codes include square data modules. MaxiCodes include a central finder pattern and a grid of hexagons surrounding the central finder pattern.
Different types of graphical codes may vary in size. For example, bar codes are typically larger in size than data matrix codes. The graphical code elements within different types of graphical codes may also vary in size. For example, the variable-width rectangular bars in bar codes are typically larger than the square data modules in data matrix codes or the hexagons in MaxiCodes.
Two-dimensional graphical codes possess several advantages over one-dimensional graphical codes. For example, two-dimensional graphical codes are designed to store considerably more information than one-dimensional graphical codes. In addition, two-dimensional graphical codes are typically smaller than one-dimensional codes. Also, in some cases, two-dimensional graphical codes do not require a high level of print quality in order to be decoded.
One issue that arises in connection with reading both one-dimensional and two-dimensional graphical codes is the surface upon which the graphical code is placed or etched. Graphical codes are often placed onto reflective surfaces, such as on some medical instruments or automotive parts. Light incident on a reflective surface in a normal direction may be fully reflected since the surface acts similar to a mirror. Light incident on the data bars, square data modules or MaxiCode hexagons are also reflected with little attenuation. When light from a point source is reflected off of a highly reflective surface, the image sensor sees a “hot spot” or point on the surface that reflects the light from the source directly onto the imager. The hot spot has a tendency to make everything surrounding it seem very dark in contrast. This poses an image processing problem. Furthermore, the high reflectivity of both the surface and the graphical code may cause the image sensor to saturate and the graphical code information may be lost. The issues associated with graphical codes on reflective surfaces may be exacerbated when the surface is curved.
In view of the foregoing, benefits may be realized by improved illumination techniques used in conjunction with graphical code readers.